package com._54programer.demo.codec;

import io.netty.buffer.ByteBuf;
import io.netty.channel.ChannelHandlerContext;
import io.netty.handler.codec.ReplayingDecoder;

import java.util.List;

/**
 * @author SN
 * @date Created by on 2019/11/30
 * @description
 * ReplayingDecoder扩展了ByteToMessageDecoder
 * 使用这个类, 不必调用readableBytes()方法, 内部会自动进行判断
 * Void指定用户状态管理的类型, Void代表不需要状态管理
 *
 * 缺点:
 * 1.并不是所有的ByteBuf操作都被支持, 如果调用一个不被支持的方法, 会抛出一个UnsupportedOperationException
 * 2.ReplayingDecoder在某些情况下可能稍慢于ByteToMessageDecoder, 例如网络缓慢并且消息格式复杂时, 消息会拆分成多个碎片, 速度变慢
 */
public class ByteToLongDecoder extends ReplayingDecoder<Void> {

    @Override
    protected void decode(ChannelHandlerContext channelHandlerContext, ByteBuf in, List<Object> out) throws Exception {
        out.add(in.readLong());
    }

}
